package com.qqtech.qquan.mall.service;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.qqtech.core.common.exception.BizzException;
import com.qqtech.core.frame.service.BaseService;
import com.qqtech.qquan.mall.model.MallCategoryVo;
import com.qqtech.qquan.mall.model.MallProduct;
import com.qqtech.qquan.mall.model.MallProductQuery;
import com.qqtech.qquan.mall.model.MallProductSpecVo;
import com.qqtech.qquan.mall.model.MallProductVo;

public interface MallProductService extends BaseService<MallProduct> {
	
	/**
	 * 后台查询列表
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<MallProductVo> queryPageListAdmin(MallProduct query, Pageable pageable);
	/**
     * 是否显示商品推荐模块
     * @param key
     * @return
     */
    String showRecommendModule(String key);
    
    /**
     * 减少商品库存量
     *
     * @param productId
     * @param quantity
     * @return
     */
    int handleReduceStock(int productId, int quantity);

    /**
     * 返回商品库存量(订单取消或退款后操作)
     *
     * @param productId
     * @param quantity
     * @return
     */
    int handleReturnStock(int productId, int quantity);
    
    /**
     * 保存商品数据
     * @param mallProduct
     * @return
     */
    int handleSaveProduct(MallProduct mallProduct, List<MallProductSpecVo> list);
    
    /**
     * 更新商品数据
     * @param mallProduct
     * @return
     */
    int handleUpdateProduct(MallProduct mallProduct, List<MallProductSpecVo> list);
    
    /**
     * 根据规格ID 获取商品信息
     * @param specId
     * @return
     */
    MallProduct getProductBySpecId(Integer specId);
    /**
	 * 根据专区信息查询商品列表
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<MallProductVo> queryPageBySubject(MallProductQuery subject, Pageable pageable);
	
	/**
	 * 商品上架
	 * @param productId
	 * @return
	 */
	int onShelf(int productId) throws BizzException;
	
	/**
	 * 商品下架
	 * @param productId
	 * @return
	 */
	int offShelf(int productId) throws BizzException;
	
    /**
	 * 根据店铺查询商品数据
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<MallProductVo> queryPageByShop(MallProductQuery query, Pageable pageable);
	
	/**
	 * 查询店铺在销售的产品分类
	 * @param shopId 店铺id
	 * @return
	 */
	public List<MallCategoryVo> queryShopSellCategory(Integer shopId);
	
	/**
     * 点击量+1
     * @param productId
     */
    void increasePv(Integer productId);
    
    /**
	 * 增加（减少）-关注（收藏）数量
	 * @param productId
	 * @param addCount
	 * @return
	 */
	int increaseConcern(Integer productId, int addCount);
	
	/**
	 * 店铺的推荐商品(上架)数量
	 * @param shopId
	 * @return 
	 */
	public int getRecommendCount(Integer shopId);
}